#ifndef CANDIDATEWINDOW_H
#define CANDIDATEWINDOW_H

#include "pinyinhandler.h"

#include <QWidget>
#include <QVector>
#include <QTimer>
#include <QLabel>
#include <QHBoxLayout>
#include <QMouseEvent>

class CandidateWindow : public QWidget
{
	Q_OBJECT
		
public:
	explicit CandidateWindow(QWidget* parent = nullptr);
	~CandidateWindow() override = default;
	// func
	void setCandidates(const QVector<PinyinCandidate>& cadidates);		// 设置候选词列表并显示窗口
	void moveBelowWidget(QWidget* targetWidget);						// 调整窗口位置（默认跟随输入控件下方）

signals:
	void candidateSelected(const QString& text);	// 选中候选词 要绑定快捷键 还有方向键切换
	void windowHidden();

protected:
	// override mouseevent
	void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
	// override resize --> 布局自适应
	void resizeEvent(QResizeEvent *event) override;
	// eveet ctrl timer
	void showEvent(QShowEvent *event) override;
    void hideEvent(QHideEvent *event) override;
	// override keybord
	void keyPressEvent(QKeyEvent *event) override;

private:
	void initUI();						// 无边框 透明
	void updateCandidateLayout();		// dymic update 候选词 调用工具
	int getCandidateIndexAt(const QPoint& pos);			// 鼠标位置 get candidate index
	void highlightSelectedCandidate(int index);

private:
	// member 
	QVector<PinyinCandidate> m_candidates;       // 当前候选词列表
    QVector<QLabel*> m_candidateLabels;          // 候选词标签（用于显示和交互）
    QHBoxLayout* m_mainLayout;                   // 主布局（水平排列候选词）
    QTimer m_hideTimer;                          // 无操作自动隐藏计时器（默认3秒）
    int m_selectedIndex;                         // 当前选中的候选词索引（-1 表示未选中）
    int m_candidateCount;                        // 候选词显示数量（从配置读取，3-9）

};


#endif	// CANDIDATEWINDOW_H